""" Autocomplete Prompt Template Use for: Large option lists with search Features: Type-ahead, fuzzy matching, suggestions """ import questionary from questionary import Choice # Example: Countries list for autocomplete COUNTRIES = [ 'Afghanistan', 'Albania', 'Algeria', 'Andorra', 'Angola', 'Argentina', 'Armenia', 'Australia', 'Austria', 'Azerbaijan', 'Bahamas', 'Bahrain', 'Bangladesh', 'Barbados', 'Belarus', 'Belgium', 'Belize', 'Benin', 'Bhutan', 'Bolivia', 'Brazil', 'Brunei', 'Bulgaria', 'Burkina Faso', 'Burundi', 'Cambodia', 'Cameroon', 'Canada', 'Cape Verde', 'Chad', 'Chile', 'China', 'Colombia', 'Comoros', 'Congo', 'Costa Rica', 'Croatia', 'Cuba', 'Cyprus', 'Czech Republic', 'Denmark', 'Djibouti', 'Dominica', 'Dominican Republic', 'Ecuador', 'Egypt', 'El Salvador', 'Estonia', 'Ethiopia', 'Fiji', 'Finland', 'France', 'Gabon', 'Gambia', 'Georgia', 'Germany', 'Ghana', 'Greece', 'Grenada', 'Guatemala', 'Guinea', 'Guyana', 'Haiti', 'Honduras', 'Hungary', 'Iceland', 'India', 'Indonesia', 'Iran', 'Iraq', 'Ireland', 'Israel', 'Italy', 'Jamaica', 'Japan', 'Jordan', 'Kazakhstan', 'Kenya', 'Kuwait', 'Laos', 'Latvia', 'Lebanon', 'Lesotho', 'Liberia', 'Libya', 'Lithuania', 'Luxembourg', 'Madagascar', 'Malawi', 'Malaysia', 'Maldives', 'Mali', 'Malta', 'Mexico', 'Moldova', 'Monaco', 'Mongolia', 'Morocco', 'Mozambique', 'Myanmar', 'Namibia', 'Nepal', 'Netherlands', 'New Zealand', 'Nicaragua', 'Niger', 'Nigeria', 'Norway', 'Oman', 'Pakistan', 'Panama', 'Paraguay', 'Peru', 'Philippines', 'Poland', 'Portugal', 'Qatar', 'Romania', 'Russia', 'Rwanda', 'Saudi Arabia', 'Senegal', 'Serbia', 'Singapore', 'Slovakia', 'Slovenia', 'Somalia', 'South Africa', 'South Korea', 'Spain', 'Sri Lanka', 'Sudan', 'Sweden', 'Switzerland', 'Syria', 'Taiwan', 'Tanzania', 'Thailand', 'Togo', 'Tunisia', 'Turkey', 'Uganda', 'Ukraine', 'United Arab Emirates', 'United Kingdom', 'United States', 'Uruguay', 'Uzbekistan', 'Venezuela', 'Vietnam', 'Yemen', 'Zambia', 'Zimbabwe' ] # Example: Popular packages POPULAR_PACKAGES = [ 'express', 'react', 'vue', 'angular', 'next', 'nuxt', 'axios', 'lodash', 'moment', 'dayjs', 'uuid', 'dotenv', 'typescript', 'eslint', 'prettier', 'jest', 'mocha', 'chai', 'webpack', 'vite', 'rollup', 'babel', 'esbuild', 'socket.io', 'redis', 'mongodb', 'mongoose', 'sequelize', 'prisma', 'typeorm', 'knex', 'pg', 'mysql2', 'bcrypt', 'jsonwebtoken', 'passport', 'helmet', 'cors', 'multer', 'sharp', 'puppeteer', 'playwright', 'cheerio' ] def autocomplete_prompt_example(): """Example autocomplete prompts""" print("\n๐Ÿ” Autocomplete Example\n") # Country selection with autocomplete country = questionary.autocomplete( "Select your country:", choices=COUNTRIES, validate=lambda text: len(text) > 0 or "Please select a country" ).ask() # Package selection package = questionary.autocomplete( "Search for an npm package:", choices=POPULAR_PACKAGES ).ask() # Cities based on country (conditional) city = None cities_by_country = { 'United States': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix'], 'United Kingdom': ['London', 'Manchester', 'Birmingham', 'Glasgow', 'Liverpool'], 'Canada': ['Toronto', 'Vancouver', 'Montreal', 'Calgary', 'Ottawa'], 'Australia': ['Sydney', 'Melbourne', 'Brisbane', 'Perth', 'Adelaide'], 'Germany': ['Berlin', 'Munich', 'Hamburg', 'Frankfurt', 'Cologne'] } if country in cities_by_country: city = questionary.autocomplete( "Select city:", choices=cities_by_country[country] ).ask() answers = { 'country': country, 'package': package, 'city': city } print("\nโœ… Selections:") import json print(json.dumps(answers, indent=2)) return answers def framework_search_example(): """Example: Framework/library search with descriptions""" print("\n๐Ÿ”Ž Framework Search Example\n") frameworks = [ 'React - UI library by Facebook', 'Vue.js - Progressive JavaScript framework', 'Angular - Platform for building web apps', 'Svelte - Cybernetically enhanced web apps', 'Next.js - React framework with SSR', 'Nuxt.js - Vue.js framework with SSR', 'Remix - Full stack web framework', 'SvelteKit - Svelte framework', 'Express - Fast Node.js web framework', 'Fastify - Fast and low overhead web framework', 'NestJS - Progressive Node.js framework', 'Koa - Expressive middleware for Node.js' ] framework = questionary.autocomplete( "Search for a framework:", choices=frameworks ).ask() # Extract value (remove description) framework_name = framework.split(' - ')[0] if ' - ' in framework else framework print(f"\nโœ… Selected: {framework_name}") return {'framework': framework_name} def command_search_example(): """Example: Command search with emojis and categories""" print("\nโŒจ๏ธ Command Search Example\n") commands = [ '๐Ÿ“ฆ install - Install dependencies', '๐Ÿš€ start - Start development server', '๐Ÿ—๏ธ build - Build for production', '๐Ÿงช test - Run tests', '๐Ÿ” lint - Check code quality', 'โœจ format - Format code', '๐Ÿ“ generate - Generate files', '๐Ÿ”„ update - Update dependencies', '๐Ÿงน clean - Clean build artifacts', '๐Ÿšข deploy - Deploy application', '๐Ÿ“Š analyze - Analyze bundle size', '๐Ÿ› debug - Start debugger' ] command = questionary.autocomplete( "Search for a command:", choices=commands ).ask() # Extract command name command_name = command.split(' - ')[0].split(' ', 1)[1] if ' - ' in command else command print(f"\nโœ… Running: {command_name}") return {'command': command_name} def api_endpoint_search(): """Example: API endpoint search""" print("\n๐Ÿ” API Endpoint Search\n") endpoints = [ 'GET /users - List all users', 'GET /users/:id - Get user by ID', 'POST /users - Create new user', 'PUT /users/:id - Update user', 'DELETE /users/:id - Delete user', 'GET /posts - List all posts', 'GET /posts/:id - Get post by ID', 'POST /posts - Create new post', 'GET /comments - List comments', 'POST /auth/login - User login', 'POST /auth/register - User registration', 'POST /auth/logout - User logout' ] endpoint = questionary.autocomplete( "Search API endpoints:", choices=endpoints ).ask() # Extract endpoint path endpoint_path = endpoint.split(' - ')[0] if ' - ' in endpoint else endpoint print(f"\nโœ… Selected endpoint: {endpoint_path}") return {'endpoint': endpoint_path} def technology_stack_selection(): """Example: Building technology stack with multiple autocomplete prompts""" print("\n๐Ÿ› ๏ธ Technology Stack Selection\n") # Programming languages languages = [ 'JavaScript', 'TypeScript', 'Python', 'Go', 'Rust', 'Java', 'C++', 'Ruby', 'PHP', 'Swift', 'Kotlin' ] language = questionary.autocomplete( "Choose programming language:", choices=languages ).ask() # Frameworks based on language frameworks_by_language = { 'JavaScript': ['React', 'Vue', 'Angular', 'Svelte', 'Express', 'Fastify'], 'TypeScript': ['Next.js', 'Nest.js', 'Angular', 'Remix', 'tRPC'], 'Python': ['Django', 'Flask', 'FastAPI', 'Tornado', 'Sanic'], 'Go': ['Gin', 'Echo', 'Fiber', 'Chi', 'Gorilla'], 'Rust': ['Actix', 'Rocket', 'Axum', 'Warp', 'Tide'], 'Java': ['Spring', 'Micronaut', 'Quarkus', 'Vert.x'], 'Ruby': ['Ruby on Rails', 'Sinatra', 'Hanami'] } framework_choices = frameworks_by_language.get(language, ['None']) framework = questionary.autocomplete( f"Choose {language} framework:", choices=framework_choices ).ask() # Databases databases = [ 'PostgreSQL', 'MySQL', 'MongoDB', 'Redis', 'SQLite', 'Cassandra', 'DynamoDB', 'CouchDB', 'Neo4j', 'InfluxDB' ] database = questionary.autocomplete( "Choose database:", choices=databases ).ask() # Cloud providers cloud_providers = [ 'AWS', 'Google Cloud', 'Azure', 'DigitalOcean', 'Heroku', 'Vercel', 'Netlify', 'Cloudflare' ] cloud = questionary.autocomplete( "Choose cloud provider:", choices=cloud_providers ).ask() stack = { 'language': language, 'framework': framework, 'database': database, 'cloud': cloud } print("\nโœ… Technology Stack:") import json print(json.dumps(stack, indent=2)) return stack def file_path_autocomplete(): """Example: File path autocomplete (simulated)""" print("\n๐Ÿ“ File Path Autocomplete Example\n") # Common project directories directories = [ '/home/user/projects/web-app', '/home/user/projects/api-server', '/home/user/projects/cli-tool', '/var/www/html', '/opt/applications', '~/Documents/code', '~/workspace/nodejs', '~/workspace/python' ] project_path = questionary.autocomplete( "Select project directory:", choices=directories ).ask() # Common config files config_files = [ 'package.json', 'tsconfig.json', 'jest.config.js', 'webpack.config.js', '.env', '.gitignore', 'README.md', 'Dockerfile', 'docker-compose.yml' ] config_file = questionary.autocomplete( "Select config file:", choices=config_files ).ask() result = { 'projectPath': project_path, 'configFile': config_file } print("\nโœ… Selected:") import json print(json.dumps(result, indent=2)) return result def main(): """Run autocomplete prompt examples""" try: print("=== Autocomplete Examples ===") # Example 1: Basic autocomplete autocomplete_prompt_example() # Example 2: Framework search framework_search_example() # Example 3: Command search command_search_example() # Example 4: API endpoint search api_endpoint_search() # Example 5: Technology stack technology_stack_selection() # Example 6: File path autocomplete file_path_autocomplete() print("\nโœ… Autocomplete examples complete!") except KeyboardInterrupt: print("\n\nโŒ User interrupted prompt") exit(1) except Exception as e: print(f"\n\nโŒ Error: {e}") exit(1) if __name__ == "__main__": main()