{# Search Bar Components ===================== Product search with autocomplete and suggestions for shop pages. Usage: {% from 'shared/macros/shop/search-bar.html' import search_bar, search_autocomplete, mobile_search %} #} {# Search Bar ========== Basic search input with icon and optional button. Parameters: - placeholder: Placeholder text (default: 'Search products...') - action: Form action URL (default: '/search') - method: Form method (default: 'get') - name: Input name (default: 'q') - value: Initial value (default: '') - show_button: Show search button (default: false) - button_label: Button text (default: 'Search') - size: 'sm' | 'md' | 'lg' (default: 'md') - variant: 'default' | 'filled' | 'minimal' (default: 'default') Usage: {{ search_bar(placeholder='Search for products...') }} {{ search_bar(show_button=true, size='lg') }} #} {% macro search_bar( placeholder='Search products...', action='/search', method='get', name='q', value='', show_button=false, button_label='Search', size='md', variant='default' ) %} {% set sizes = { 'sm': {'input': 'py-1.5 pl-8 pr-3 text-sm', 'icon': 'w-4 h-4 left-2.5', 'button': 'px-3 py-1.5 text-sm'}, 'md': {'input': 'py-2.5 pl-10 pr-4 text-sm', 'icon': 'w-5 h-5 left-3', 'button': 'px-4 py-2.5 text-sm'}, 'lg': {'input': 'py-3 pl-12 pr-4 text-base', 'icon': 'w-6 h-6 left-3.5', 'button': 'px-5 py-3 text-base'} } %} {% set variants = { 'default': 'bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 focus:border-purple-500 dark:focus:border-purple-400 focus:ring-2 focus:ring-purple-500/20', 'filled': 'bg-gray-100 dark:bg-gray-700 border border-transparent focus:bg-white dark:focus:bg-gray-800 focus:border-purple-500 dark:focus:border-purple-400 focus:ring-2 focus:ring-purple-500/20', 'minimal': 'bg-transparent border-b border-gray-300 dark:border-gray-600 rounded-none focus:border-purple-500 dark:focus:border-purple-400' } %}
{% endmacro %} {# Search Autocomplete =================== Search input with dropdown suggestions and autocomplete. Parameters: - placeholder: Placeholder text (default: 'Search products...') - action: Form action URL (default: '/search') - search_endpoint: API endpoint for suggestions (default: '/api/search/suggest') - min_chars: Minimum characters to trigger search (default: 2) - debounce: Debounce delay in ms (default: 300) - show_recent: Show recent searches (default: true) - show_popular: Show popular searches (default: true) - max_suggestions: Maximum suggestions to show (default: 5) - size: 'sm' | 'md' | 'lg' (default: 'md') Usage: {{ search_autocomplete(search_endpoint='/api/products/search') }} #} {% macro search_autocomplete( placeholder='Search products...', action='/search', search_endpoint='/api/search/suggest', min_chars=2, debounce=300, show_recent=true, show_popular=true, max_suggestions=5, size='md' ) %} {% set sizes = { 'sm': {'input': 'py-1.5 pl-8 pr-8 text-sm', 'icon': 'w-4 h-4', 'dropdown': 'mt-1'}, 'md': {'input': 'py-2.5 pl-10 pr-10 text-sm', 'icon': 'w-5 h-5', 'dropdown': 'mt-2'}, 'lg': {'input': 'py-3 pl-12 pr-12 text-base', 'icon': 'w-6 h-6', 'dropdown': 'mt-2'} } %}